package com.restaurante.restauranteandroid.utils;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.restaurante.restauranteandroid.model.Cliente;
import com.restaurante.restauranteandroid.model.Pedido;
import com.restaurante.restauranteandroid.model.PedidoTotal;
import com.restaurante.restauranteandroid.model.Produto;
import com.restaurante.restauranteandroid.model.Status;


/**
* 
* Método responsável por fazer chamada ao web service e buscar as
* informações(json)atraves da URI.
* 
* @return ArrayList<Usuario>
* @throws Exception
* @author Douglas Costa <douglas.cst90@gmail.com.br>
* @since 06/06/2013 10:29:03
* @version 1.0
*/
public class CelulaREST {
	private static String URI = "http://200.236.3.199:8080"; 
	
	public static Cliente login(String login, String senha) throws Exception{
		String parametros = "/Droid/usuario/loginValido";
		parametros += "/"+login+"/"+senha;
		String[] json = new WebService().get(URI +parametros);
		Cliente cliente = new Cliente();
		
		if (json[0].equals("200")) {
			JSONObject response = new JSONObject(json[1]);
			cliente.setNome(response.getString("nome"));
			cliente.setCodigoErro(response.getInt("codigoErro"));
			cliente.setIdCliente(response.getInt("idCliente"));
		}else{
			cliente.setCodigoErro(1);
		}
		
		return cliente;
	}
	
	public static Status inicializaPedido (Integer idCliente) throws Exception{
		String parametros = "/Droid/usuario/inicializaPedido/"+idCliente;
		String[] json = new WebService().get(URI +parametros);
		Status status = new Status();
		
		if (json[0].equals("200")) {
			JSONObject response = new JSONObject(json[1]);
			status.setCodigoErro(response.getInt("codigoErro"));
		}else{
			status.setCodigoErro(1);
		}
		
		return status;
	}
	
	public static Status inserePedido(Integer idPedido, Integer idProduto, Integer quantidade){
		String parametros = "/Droid/usuario/inserePedido/";
		parametros += idPedido+"/"+idProduto+"/"+quantidade;
		Status status = new Status();
		try {
			String[] json = new WebService().get(URI + parametros);

			if (json[0].equals("200")) {
				JSONObject response = new JSONObject(json[1]);
				status.setCodigoErro(response.getInt("codigoErro"));
			} else {
				status.setCodigoErro(1);
			}
		} catch (Exception e) {
			status.setCodigoErro(1);
		}
		return status;
	}
	
	public static Pedido retornaIdPedido (Integer idCliente) throws Exception{
		String parametros = "/Droid/usuario/retornaIdPedido/"+idCliente;
		String[] json = new WebService().get(URI +parametros);
		Pedido pedido = new Pedido();
		
		if (json[0].equals("200")) {
			JSONObject response = new JSONObject(json[1]);
			pedido.setIdpedido(response.getInt("idpedido"));
			pedido.setCodigoErro(response.getInt("codigoErro"));
		}else{
			pedido.setCodigoErro(1);
		}
		
		return pedido;
	}

	public static List<Produto> listaProdutos() throws Exception {
		
		String[] json = new WebService().get(URI + "/Droid/usuario/listarProdutos");
		
		List<Produto> produtos = new ArrayList<Produto>();
		
		if (json[0].equals("200")) {
		
		Produto produto = new Produto();
		
		if (!json[1].contains("[")){
			JSONObject response = new JSONObject(json[1]); 
			produto.setIdProduto(response.getJSONObject("produto").getInt("idProduto"));
			produto.setNome(response.getJSONObject("produto").getString("nome"));
			produto.setTipo(response.getJSONObject("produto").getString("tipo"));
			produto.setPreco(Float.valueOf(response.getJSONObject("produto").getString("preco")));
			produtos.add(produto);
		}else{
			JSONObject response = new JSONObject(json[1]);
			JSONArray responseArray = response.getJSONArray("produto");
			for (int i = 0; i < responseArray.length(); i++) {
				JSONObject responseObject = (JSONObject) responseArray.get(i);
				produto = new Produto();
				produto.setIdProduto(responseObject.getInt("idProduto"));
				produto.setNome(responseObject.getString("nome"));
				produto.setTipo(responseObject.getString("tipo"));
				produto.setPreco(Float.valueOf(responseObject.getString("preco")));
				produtos.add(produto);
			}
		}
		return produtos;
			
		}
		else {
			throw new Exception(json[1]);
		}	
	}
	
	public static List<PedidoTotal> listaPedido(Integer idPedido) throws Exception {
		
		String[] json = new WebService().get(URI + "/Droid/usuario/listaPedido/"+idPedido);
		
		List<PedidoTotal> produtos = new ArrayList<PedidoTotal>();
		
		if (json[0].equals("200")) {
		
		PedidoTotal produto = new PedidoTotal();
		
		if (!json[1].contains("[")){
			JSONObject response = new JSONObject(json[1]); 
			produto.setNome(response.getJSONObject("pedidoTotal").getString("nome"));
			produto.setPreco(Float.valueOf(response.getJSONObject("pedidoTotal").getString("preco")));
			produto.setPrecoTotal(Float.valueOf(response.getJSONObject("pedidoTotal").getString("precoTotal")));
			produto.setQuantidade(response.getJSONObject("pedidoTotal").getInt("quantidade"));
			produtos.add(produto);
		}else{
			JSONObject response = new JSONObject(json[1]);
			JSONArray responseArray = response.getJSONArray("pedidoTotal");
			for (int i = 0; i < responseArray.length(); i++) {
				JSONObject responseObject = (JSONObject) responseArray.get(i);
				produto = new PedidoTotal();
				produto.setNome(responseObject.getString("nome"));
				produto.setPreco(Float.valueOf(responseObject.getString("preco")));
				produto.setPrecoTotal(Float.valueOf(responseObject.getString("precoTotal")));
				produto.setQuantidade(responseObject.getInt("quantidade"));
				produtos.add(produto);
			}
		}
		return produtos;
			
		}
		else {
			throw new Exception(json[1]);
		}	
	}
	
	public static Status finalizaPagamento(Integer idPedido, String metodoPagamento){
		String parametros = "/Droid/usuario/finalizaPagamento/";
		parametros += idPedido+"/"+metodoPagamento;
		Status status = new Status();
		try {
			String[] json = new WebService().get(URI + parametros);

			if (json[0].equals("200")) {
				JSONObject response = new JSONObject(json[1]);
				status.setCodigoErro(response.getInt("codigoErro"));
			} else {
				status.setCodigoErro(1);
			}
		} catch (Exception e) {
			status.setCodigoErro(1);
		}
		return status;
	}
	
}